home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!lll-winken!lll-tis!ames!ll-xn!mit-eddie!uw-beaver!tektronix!tekgen!tekred!games
- From: games@tekred.TEK.COM
- Newsgroups: comp.sources.games
- Subject: v04i047: conquer3 - middle earth multi-player game (V3), Part06/08
- Message-ID: <2656@tekred.TEK.COM>
- Date: 16 Jun 88 21:39:08 GMT
- Sender: billr@tekred.TEK.COM
- Lines: 2210
- Approved: billr@saab.CNA.TEK.COM
-
- Submitted by: ihnp4!homxc!smile
- Comp.sources.games: Volume 4, Issue 47
- Archive-name: conquer3/Part06
-
-
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 6 (of 8)."
- # Contents: data.h magic.c main.c
- # Wrapped by billr@saab on Thu Jun 16 09:40:01 1988
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f data.h -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"data.h\"
- else
- echo shar: Extracting \"data.h\" \(13697 characters\)
- sed "s/^X//" >data.h <<'END_OF_data.h'
- X/* conquer : Copyright (c) 1988 by Ed Barlow. */
- X
- X/*--------I DO BELIEVE IT IS NECESSARY TO ALTER THIS FILE-------------------*/
- X#define FAIL 1 /* fail return to shell */
- X#define SUCCESS 0 /* successful return to shell */
- X#define BIG 500000000L /* BIGGER THAN ANYTHING SHOULD BE */
- X
- X#include <curses.h>
- X/* sometimes curses.h defines TRUE ...but doesn't */
- X/* check if already defined */
- X#ifndef TRUE
- X#define TRUE 1
- X#define FALSE 0
- X#endif
- X
- X/* these defines are for types of magic */
- X#define M_MIL 1
- X#define M_CIV 2
- X#define M_MGK 3
- X
- X/*simple contour map definitions*/
- X#define WATER (*(ele+0))
- X#define PEAK (*(ele+1))
- X#define MOUNTAIN (*(ele+2))
- X#define HILL (*(ele+3))
- X#define CLEAR (*(ele+4))
- X
- X/*racial types*/
- X#define GOD '-'
- X#define ORC 'O'
- X#define ELF 'E'
- X#define DWARF 'D'
- X#define LIZARD 'L'
- X#define HUMAN 'H'
- X#define PIRATE 'P'
- X#define BARBARIAN 'B'
- X#define NOMAD 'N'
- X#define TUNKNOWN '?'
- X
- X/*designations*/
- X#ifdef 1
- X#define DCITY 't'
- X#define DCAPITOL 'c'
- X#define DMINE 'm'
- X#define DFARM 'f'
- X#define DDEVASTATED 'x'
- X#define DGOLDMINE '$'
- X#define DCASTLE '!'
- X#define DNODESIG '-'
- X#else
- X#define DCITY (*(des+0))
- X#define DCAPITOL (*(des+1))
- X#define DMINE (*(des+2))
- X#define DFARM (*(des+3))
- X#define DDEVASTATED (*(des+4))
- X#define DGOLDMINE (*(des+5))
- X#define DCASTLE (*(des+6))
- X#define DNODESIG (*(des+7))
- X#endif
- X
- X/* nation placement variables */
- X#define GREAT 'G'
- X#define FAIR 'F'
- X#define RANDOM 'R'
- X#define OOPS 'X'
- X
- X/*vegetation types -- these are legal in designations too*/
- X#define VOLCANO (*(veg+0))
- X#define DESERT (*(veg+1))
- X#define TUNDRA (*(veg+2))
- X#define BARREN (*(veg+3))
- X#define LT_VEG (*(veg+4))
- X#define GOOD (*(veg+5))
- X#define WOOD (*(veg+6))
- X#define FOREST (*(veg+7))
- X#define JUNGLE (*(veg+8))
- X#define SWAMP (*(veg+9))
- X#define ICE (*(veg+10))
- X#define NONE (*(veg+11))
- X
- X/*Diplomacy Variables*/
- X#define JIHAD 7
- X#define WAR 6
- X#define HOSTILE 5
- X#define NEUTRAL 4
- X#define FRIENDLY 3
- X#define ALLIED 2
- X#define CONFEDERACY 1
- X#define UNMET 0
- X
- X/*army status*/
- X#define MARCH 1 /*March */
- X#define SCOUT 2 /*Scouting--will not engage enemy if possible*/
- X#define ATTACK 3 /*Attack anybody (Hostile+) within 2 sectors*/
- X#define DEFEND 4 /*Defend */
- X#define GARRISON 5 /*Garrison--for a city or Capitol */
- X
- Xstruct s_sector
- X{
- X char designation; /*designation of sector*/
- X char altitude; /*sector altitude */
- X char vegetation; /*sector vegetation */
- X short owner; /*nation id of owner, MAXNTN+? is SPECIAL*/
- X int people; /*civilians in sector*/
- X short i_people; /* initial civilians in sector */
- X unsigned char gold; /*gold production ability*/
- X unsigned char fortress; /*fortification level (0 to 9)*/
- X unsigned char iron; /*amount of iron produced by sector*/
- X};
- X#define SOWN sct[xcurs+xoffset][ycurs+yoffset].owner
- X#define XREAL (xcurs+xoffset)
- X#define YREAL (ycurs+yoffset)
- X
- X#define SCREEN_X_SIZE ( (COLS - 21) / 2 )
- X#define SCREEN_Y_SIZE ( LINES - 5 )
- X
- X#define PASSLTH 7 /*one less than the characters in the password*/
- X#define NAMELTH 9 /*one less than the characters in the name*/
- X#define LEADERLTH 9 /*one less than the characters in the leader*/
- X
- Xstruct navy
- X{
- X short warships;
- X short merchant;
- X short xloc;
- X short yloc;
- X short smove;
- X short crew;
- X short armynum;
- X};
- X
- X#define A_MILITIA 0
- X#define A_GOBLIN 1
- X#define A_ORC 2
- X#define A_INFANTRY 3
- X#define A_SAILOR 4
- X#define A_MARINES 5
- X#define A_ARCHER 6
- X#define A_URUK 7
- X#define A_NINJA 8
- X#define A_PHALANX 9
- X#define A_OLOG 10
- X#define A_LEGION 11
- X#define A_DRAGOON 12
- X#define A_MERCENARY 13
- X#define A_TROLL 14
- X#define A_ELITE 15
- X#define A_LT_CAV 16
- X#define A_CAVALRY 17
- X#define A_CATAPULT 18
- X#define A_SEIGE 19
- X#define A_ROC 20
- X#define A_KNIGHT 21
- X#define A_GRIFFON 22
- X#define A_ELEPHANT 23
- X#define NOUNITTYPES 23 /*number of unit types*/
- X
- X#define MINLEADER 124 /* min value of a leader -1*/
- X#define A_LEADER 124
- X#define MAXLEADER 124 /* max value for leader */
- X
- X#define MINMONSTER 225 /* min value of a monster -1*/
- X#define SPIRIT 225
- X#define ASSASSIN 226
- X#define DJINNI 227
- X#define GARGOYLE 228
- X#define WRAITH 229
- X#define HERO 230
- X#define CENTAUR 231
- X#define GIANT 232
- X#define SUPERHERO 233
- X#define MUMMY 234
- X#define ELEMENTAL 235
- X#define MINOTAUR 236
- X#define DEMON 237
- X#define BALROG 238
- X#define DRAGON 239
- X#define MAXMONSTER 239
- X
- Xstruct army
- X{
- X short unittyp;
- X short xloc;
- X short yloc;
- X short smove;
- X int sold;
- X short stat;
- X};
- X
- Xstruct nation /* player nation stats */
- X{
- X char name[NAMELTH+1];/* name */
- X char passwd[PASSLTH+1];/* password */
- X char leader[LEADERLTH+1];/* leader title */
- X char race; /* national race (integer--see header.h)*/
- X short class; /* national class*/
- X char location; /* location variable gfr */
- X char mark; /* unique mark for nation*/
- X short capx; /* Capitol x coord */
- X short capy; /* Capitol y coord */
- X short active; /* activity level of nation, not sure if
- X i have used this variable consistently:
- X 1 if PC NATION,
- X 2+Aggressiveness if NPC,
- X 0 if inactive,
- X 999 to represents MONSTER (pirate...)*/
- X short aplus; /* attack plus of all soldiers*/
- X short dplus; /* attack plus of all soldiers*/
- X short maxmove; /* maximum movement of soldiers*/
- X short repro; /* reproduction rate of nation*/
- X long score; /* score */
- X long tgold; /* gold in treasury */
- X long jewels; /* raw amount of gold in treasury */
- X long tmil; /* total military */
- X long tciv; /* total civilians */
- X long tiron; /* total real iron in nation*/
- X long tfood; /* total food in nation*/
- X long powers;
- X short spellpts; /* spell points */
- X short tsctrs; /* total number sectors */
- X short tships; /* number warships */
- X struct army arm[MAXARM];
- X struct navy nvy[MAXNAVY];
- X short dstatus[MAXNTN+4]; /*diplomatic status*/
- X};
- X
- X#define ATYPE ntn[country].arm[armynum].unittyp
- X#define AXLOC ntn[country].arm[armynum].xloc
- X#define AYLOC ntn[country].arm[armynum].yloc
- X#define AMOVE ntn[country].arm[armynum].smove
- X#define ASOLD ntn[country].arm[armynum].sold
- X#define ASTAT ntn[country].arm[armynum].stat
- X#define NWAR ntn[country].nvy[nvynum].warships
- X#define NMER ntn[country].nvy[nvynum].merchant
- X#define NCREW ntn[country].nvy[nvynum].crew
- X#define NXLOC ntn[country].nvy[nvynum].xloc
- X#define NYLOC ntn[country].nvy[nvynum].yloc
- X#define NMOVE ntn[country].nvy[nvynum].smove
- X
- Xextern struct s_sector sct[MAPX][MAPY];
- Xextern struct nation ntn[MAXNTN+4];
- Xextern short movecost[MAPX][MAPY];
- X/*is sector occupied, if MAXNTN+1 2+ armies occupy*/
- Xextern char occ[ MAPX ][ MAPY ];
- X
- X#define AORN 0
- X#define ARMY 1
- X#define NAVY 2
- X
- X#define XASTAT 1
- X#define XAMEN 2
- X#define XALOC 4
- X#define XNLOC 5
- X#define XNASHP 6
- X#define XECNAME 8
- X#define XECPAS 9
- X#define EDSPL 10
- X#define XSADES 11
- X#define XSACIV 12
- X#define XSIFORT 13
- X#define XNAGOLD 14
- X#define XAMOV 15
- X#define XNMOV 16
- X#define XSAOWN 17
- X#define EDADJ 18
- X#define XNARGOLD 19
- X#define XNAIRON 20
- X#define INCAPLUS 22
- X#define INCDPLUS 23
- X#define CHG_MGK 24
- X#define DESTRY 25
- X
- X#define DESTROY fprintf(fexe,"DESTROY \t%d \t%d \t%hd \t0 \t0 \t%s\n",DESTRY,save,country,"null")
- X#define CHGMGK fprintf(fexe,"L_MAGIC \t%d \t%hd \t%ld \t%ld \t0 \t%s\n",CHG_MGK,country,ntn[country].powers,x,"null")
- X#define I_APLUS fprintf(fexe,"INC_APLUS \t%d \t%hd \t0 \t0 \t0 \t%s\n",INCAPLUS,country,"null")
- X#define I_DPLUS fprintf(fexe,"INC_DPLUS \t%d \t%hd \t0 \t0 \t0 \t%s\n",INCDPLUS,country,"null")
- X#define AADJSTAT fprintf(fexe,"A_STAT \t%d \t%hd \t%d \t%d \t0 \t%s\n",XASTAT,country,armynum,ntn[country].arm[armynum].stat,"null")
- X#define AADJMEN fprintf(fexe,"L_ADJMEN \t%d \t%hd \t%d \t%d \t%d \t%s\n",XAMEN ,country,armynum,ASOLD,ATYPE,"null")
- X#define NADJSHP fprintf(fexe,"N_ASHP \t%d \t%hd \t%d \t%d \t%d \t%s\n",XNASHP ,country,nvynum,ntn[country].nvy[nvynum].merchant,ntn[country].nvy[nvynum].warships,"null" )
- X#define AADJLOC fprintf(fexe,"A_LOC \t%d \t%hd \t%d \t%d \t%d \t%s\n",XALOC ,country,armynum,ntn[country].arm[armynum].xloc,ntn[country].arm[armynum].yloc,"null")
- X#define NADJLOC fprintf(fexe,"N_LOC \t%d \t%hd \t%d \t%d \t%d \t%s\n",XNLOC ,country,nvynum,ntn[country].nvy[nvynum].xloc,ntn[country].nvy[nvynum].yloc ,"null")
- X#define AADJMOV fprintf(fexe,"A_MOV \t%d \t%hd \t%d \t%d \t0 \t%s\n",XAMOV ,country,armynum,ntn[country].arm[armynum].smove,"null")
- X#define NADJMOV fprintf(fexe,"N_MOV \t%d \t%hd \t%d \t%d \t0 \t%s\n",XNMOV ,country,nvynum,ntn[country].nvy[nvynum].smove,"null")
- X#define ECHGNAME fprintf(fexe,"E_CNAME \t%d \t%hd \t0 \t0 \t0 \t%s\n",XECNAME ,country,ntn[country].name)
- X#define ECHGPAS fprintf(fexe,"E_CPAS \t%d \t%hd \t0 \t0 \t0 \t%s\n",XECPAS ,country,crypt(string,SALT))
- X#define SADJDES fprintf(fexe,"S_ADES \t%d \t%hd \t0 \t%d \t%d \t%c\n",XSADES ,country,xcurs+xoffset,ycurs+yoffset,sct[xcurs+xoffset][ycurs+yoffset].designation)
- X#define SADJDES2 fprintf(fexe,"S_ADES \t%d \t%hd \t0 \t%d \t%d \t%c\n",XSADES ,country,x,y,sct[x][y].designation)
- X#define SADJCIV2 fprintf(fexe,"S_ACIV \t%d \t%hd \t%d \t%d \t%d \t%s\n",XSACIV ,country,sct[i][j].people,i,j,"null")
- X#define SADJCIV fprintf(fexe,"S_ACIV \t%d \t%hd \t%d \t%d \t%d \t%s\n",XSACIV ,country,sct[xcurs+xoffset][ycurs+yoffset].people,xcurs+xoffset,ycurs+yoffset,"null")
- X#define INCFORT fprintf(fexe,"SIFORT \t%d \t%hd \t0 \t%d \t%d \t%s\n",XSIFORT ,country,xcurs+xoffset,ycurs+yoffset,"null")
- X#define SADJOWN fprintf(fexe,"S_AOWN \t%d \t%hd \t0 \t%d \t%d \t%s\n",XSAOWN ,country,xcurs+xoffset,ycurs+yoffset,"null")
- X#define EADJDIP fprintf(fexe,"E_ADJ \t%d \t%hd \t%d \t%d \t0 \t%s\n",EDADJ,country,nation,ntn[country].dstatus[nation],"null")
- X#define EDECSPL fprintf(fexe,"E_SPL \t%d \t%hd \t%d \t%d \t0 \t%s\n",EDSPL,country,s_cost,0,"null")
- X
- X#define S_MIL 0 /* position in powers array */
- X#define WARRIOR 0x00000001L
- X#define CAPTAIN 0x00000002L
- X#define WARLORD 0x00000004L
- X#define ARCHER 0x00000008L
- X#define CAVALRY 0x00000010L
- X#define SAPPER 0x00000020L
- X#define ARMOR 0x00000040L
- X#define AVIAN 0x00000080L
- X#define MI_MONST 0x00000100L
- X#define AV_MONST 0x00000200L
- X#define MA_MONST 0x00000400L
- X#define E_MIL 11
- X /*CIVILIAN POWERS */
- X#define S_CIV 11
- X#define SLAVER 0x00000800L
- X#define DERVISH 0x00001000L
- X#define HIDDEN 0x00002000L
- X#define ARCHITECT 0x00004000L
- X#define HEALER 0x00008000L
- X#define MINER 0x00010000L
- X#define BREEDER 0x00020000L
- X#define URBAN 0x00040000L
- X#define STEEL 0x00080000L
- X#define NINJA 0x00100000L
- X#define SAILOR 0x00200000L
- X#define DEMOCRACY 0x00400000L
- X#define ROADS 0x00800000L
- X#define E_CIV 13
- X /* MAGICAL SKILLS */
- X#define S_MGK 24
- X#define THE_VOID 0x01000000L
- X#define KNOWALL 0x02000000L
- X#define DESTROYER 0x04000000L
- X#define VAMPIRE 0x08000000L
- X#define SUMMON 0x10000000L
- X#define WYZARD 0x20000000L
- X#define SORCERER 0x40000000L
- X#define E_MGK 7
- X#define MAXPOWER 31 /* number of powers */
- X
- X/*my first macro: which will return 1 if the nation has that power*/
- X#define magic(NATION,POWER) ((ntn[NATION].powers&(POWER))!=0)
- X
- X#define ONMAP (x>=0 && y>=0 && x<MAPX && y<MAPY)
- X
- X#ifndef HILIGHT
- X#define standout()
- X#endif
- X
- X#ifdef BEEP
- X#define beep() putc('\007',stderr)
- X#else
- X#define beep()
- X#endif
- X
- X#ifdef SYSV
- X#define rand() lrand48()
- X#define srand(x) srand48(x)
- X#else
- X#define rand() random()
- X#define srand(x) srandom(x)
- X#endif
- X
- X#define FOODTHRESH 3
- X#define GOLDTHRESH 10
- X#define JEWELTHRESH 10
- X
- X#define SALT "aa" /* salt for crypt */
- X
- X
- Xextern char *ele;
- Xextern char *elename[];
- Xextern char *veg;
- Xextern int vegfood[];
- Xextern char *vegname[];
- Xextern char *numbers;
- Xextern char *Class[];
- Xextern char *races[];
- Xextern char *diploname[];
- Xextern char *soldname[];
- Xextern char *unittype[];
- Xextern char *shunittype[];
- Xextern int unitminsth[];
- Xextern int u_eniron[];
- Xextern int u_encost[];
- Xextern int unitmaint[];
- Xextern char *des;
- Xextern char *desname[];
- Xextern char *pwrname[];
- Xextern long powers[];
- X
- X#ifdef ADMIN
- Xextern char *npcsfile;
- Xextern int unitattack[];
- Xextern int unitdefend[];
- Xextern int unitmove[];
- X#endif ADMIN
- X
- X/*file name definitions */
- Xextern char *exefile;
- Xextern char *datafile;
- Xextern char *msgfile;
- Xextern char *helpfile;
- Xextern char *newsfile;
- Xextern char *isonfile;
- X
- X#define abrt() { \
- Xfprintf(stderr,"\nSerious Error (File %s, Line %d) - Aborting\n",__FILE__,__LINE__); \
- Xexit(FAIL); \
- X}
- X
- X/* extern everything else */
- Xextern long exenewmgk(), getmagic(), getmagic(), getmgkcost(), score_one();
- Xextern struct s_sector *rand_sector();
- X
- Xextern void adjarm(),armymove(),armyrpt(),atkattr(),blowup();
- Xextern void budget(),change(),cheat(),coffmap(),combat(),construct();
- Xextern void defattr(),destroy(),diploscrn(),domagic(),draft(),erupt();
- Xextern void fight(),fill_edge(),flee(),fleetrpt(),hangup(),help();
- Xextern void highlight(),makemap(),makeside(),makeworld(),monster(),moveciv();
- Xextern void mymove(),navalcbt(),newdip(),newdisplay(),newlogin();
- Xextern void newspaper(),npcredes(),offmap(),place(),populate(),prep();
- Xextern void printele(),printnat(),printscore(),printveg(),pr_ntns(),produce();
- Xextern void readdata(),redesignate(),redomil(),reduce(),rmessage(),score();
- Xextern void see(),showscore(),update(),updmove(),verifydata(),verify_ntn();
- Xextern void verify_sct(),wmessage(),writedata(),getdstatus(),exit();
- X
- Xextern char *crypt(),*strcpy(),*strncpy(),*strcat(),*strncat();
- X
- X#define HI_OWN 0 /* hilight modes */
- X#define HI_ARMY 1
- X#define HI_NONE 2
- X#define HI_YARM 3
- X#define HI_MOVE 4
- X
- X#define DI_VEGE 1 /* display modes */
- X#define DI_DESI 2
- X#define DI_CONT 3
- X#define DI_FOOD 4
- X#define DI_NATI 5
- X#define DI_RACE 6
- X#define DI_MOVE 7
- X#define DI_DEFE 8
- X#define DI_PEOP 9
- X#define DI_GOLD 10
- X#define DI_IRON 11
- X
- Xextern struct sprd_sht
- X{
- X /* total product at end of turn */
- X long food, gold, jewels, iron;
- X /* revenue this turn */
- X long revfood, revjewels, reviron, revcap, revcity;
- X /* civilians in that type of sector */
- X int ingold, iniron, infarm, incity, incap;
- X int sectors, civilians;
- X} spread;
- END_OF_data.h
- if test 13697 -ne `wc -c <data.h`; then
- echo shar: \"data.h\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f magic.c -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"magic.c\"
- else
- echo shar: Extracting \"magic.c\" \(20241 characters\)
- sed "s/^X//" >magic.c <<'END_OF_magic.c'
- X/*conquer : Copyright (c) 1988 by Ed Barlow.
- X * I spent a long time writing this code & I hope that you respect this.
- X * I give permission to alter the code, but not to copy or redistribute
- X * it without my explicit permission. If you alter the code,
- X * please document changes and send me a copy, so all can have it.
- X * This code, to the best of my knowledge works well, but it is my first
- X * 'C' program and should be treated as such. I disclaim any
- X * responsibility for the codes actions (use at your own risk). I guess
- X * I am saying "Happy gaming", and am trying not to get sued in the process.
- X * Ed
- X */
- X
- X/*create a new login for a new player*/
- X#include "header.h"
- X#include "data.h"
- X#include <ctype.h>
- X
- Xextern short country;
- Xextern short redraw;
- Xextern FILE *fexe;
- Xextern FILE *fnews;
- X
- X/*give player one new magic power in current magic (powers)*/
- X/*do nothing if that player has that power or it is not permitted*/
- X/*getmagic() returns the value of the power gained, and stores it in power*/
- X
- Xlong
- Xgetmagic(type)
- Xint type;
- X{
- X long newpower;
- X int start,end;
- X switch(type){
- X case M_MGK:
- X start=S_MGK;
- X end=E_MGK;
- X break;
- X case M_CIV:
- X start=S_CIV;
- X end=E_CIV;
- X break;
- X case M_MIL:
- X start=S_MIL;
- X end=E_MIL;
- X break;
- X default:
- X printf("fatal error in num_powers");
- X abrt();
- X }
- X newpower=powers[start+(rand()%end)];
- X if(newpower==0) {
- X printf("ILLEGAL POWER");
- X abrt();
- X }
- X
- X if((newpower==WARRIOR)||(newpower==CAPTAIN)||(newpower==WARLORD)){
- X if(magic(country,WARRIOR)!=TRUE){
- X ntn[country].powers|=WARRIOR;
- X return(WARRIOR);
- X }
- X else if(magic(country,CAPTAIN)!=TRUE){
- X ntn[country].powers|=CAPTAIN;
- X return(CAPTAIN);
- X }
- X else if(magic(country,WARLORD)!=TRUE){
- X ntn[country].powers|=WARLORD;
- X return(WARLORD);
- X }
- X else return(0L);
- X }else if((newpower==MI_MONST) ||(newpower==AV_MONST) ||(newpower==MA_MONST)){
- X if(ntn[country].race!=ORC) return(0L);
- X if(magic(country,MI_MONST)!=TRUE){
- X ntn[country].powers|=MI_MONST;
- X return(MI_MONST);
- X }
- X else if(magic(country,AV_MONST)!=TRUE){
- X ntn[country].powers|=AV_MONST;
- X return(AV_MONST);
- X }
- X else if(magic(country,MA_MONST)==TRUE){
- X ntn[country].powers|=MA_MONST;
- X return(MA_MONST);
- X }
- X else return(0L);
- X }else if(newpower==CAVALRY){
- X if(ntn[country].active >= 2) return(0L); /*npc nation*/
- X if(magic(country,newpower)==TRUE) return(0L);
- X ntn[country].powers|=newpower;
- X return(newpower);
- X }else if(newpower==URBAN){
- X if(magic(country,BREEDER)==TRUE) return(0L);
- X if(magic(country,newpower)==TRUE) return(0L);
- X ntn[country].powers|=newpower;
- X return(newpower);
- X }else if(newpower==HEALER){
- X if(ntn[country].race==ORC) return(0L);
- X if(magic(country,newpower)==TRUE) return(0L);
- X ntn[country].powers|=newpower;
- X return(newpower);
- X }else if(newpower==KNOWALL){
- X#ifdef OGOD
- X /* only god should have KNOWALL if sectors hidden */
- X if(country!=0) return(0L);
- X#endif
- X if(magic(country,KNOWALL)==TRUE) return(0L);
- X ntn[country].powers|=KNOWALL;
- X return(KNOWALL);
- X }else if((newpower==SLAVER)
- X ||(newpower==DERVISH)
- X ||(newpower==HIDDEN)
- X ||(newpower==ARCHITECT)
- X ||(newpower==THE_VOID)
- X ||(newpower==ARCHER)){
- X if(magic(country,newpower)==TRUE) return(0L);
- X ntn[country].powers|=newpower;
- X return(newpower);
- X }else if(newpower==DESTROYER){
- X if((ntn[country].race!=ELF)&&(magic(country,DESTROYER)!=TRUE)){
- X ntn[country].powers|=DESTROYER;
- X return(DESTROYER);
- X }
- X return(0L);
- X }else if(newpower==VAMPIRE){
- X if((ntn[country].race!=ELF)&&(magic(country,VAMPIRE)!=TRUE)){
- X ntn[country].powers|=VAMPIRE;
- X return(VAMPIRE);
- X }
- X return(0L);
- X }else if(newpower==MINER){
- X if((ntn[country].race!=ELF)&&(ntn[country].race!=DWARF)&&(magic(country,MINER)!=TRUE)){
- X ntn[country].powers|=MINER;
- X return(MINER);
- X }
- X return(0L);
- X }else if(newpower==STEEL){
- X if(magic(country,STEEL)==TRUE) return(0L);
- X if(magic(country,MINER)!=TRUE) return(0L);
- X ntn[country].powers|=STEEL;
- X return(STEEL);
- X }else if(newpower==BREEDER){
- X if(magic(country,URBAN)==TRUE) return(0L);
- X if(magic(country,BREEDER)==TRUE) return(0L);
- X if(ntn[country].race!=ORC) return(0L);
- X ntn[country].powers|=BREEDER;
- X return(BREEDER);
- X }
- X else if(ntn[country].active >= 2) return(0L); /*npc nation*/
- X else if((newpower==NINJA)
- X ||(newpower==SLAVER)
- X ||(newpower==SAILOR)
- X ||(newpower==DEMOCRACY)
- X ||(newpower==ROADS)
- X ||(newpower==SUMMON)
- X ||(newpower==WYZARD)
- X ||(newpower==SORCERER)
- X ||(newpower==SAPPER)
- X ||(newpower==ARMOR)
- X ||(newpower==AVIAN)){ /* these powers are only for pc's */
- X if(magic(country,newpower)==TRUE) return(0L);
- X ntn[country].powers|=newpower;
- X return(newpower);
- X }
- X else return(0L);
- X}
- X#ifdef CONQUER
- X/*form to interactively get a magic power*/
- Xvoid
- Xdomagic()
- X{
- X int count, done=FALSE, loop=0, i,type;
- X long price,x;
- X short isgod=0;
- X if(country==0) {
- X isgod=1;
- X clear();
- X mvaddstr(0,0,"WHAT NATION NUMBER:");
- X refresh();
- X country = get_number();
- X }
- X
- X while(done==FALSE){
- X done=TRUE;
- X clear();
- X count=3;
- X redraw=TRUE;
- X standout();
- X mvprintw(0,(COLS/2)-15,"MAGIC POWERS FOR %s",ntn[country].name);
- X mvprintw(count++,30,"1) %d military powers: %ld jewels",
- X num_powers(country,M_MIL) ,getmgkcost(M_MIL,country));
- X mvprintw(count++,30,"2) %d civilian powers: %ld jewels",
- X num_powers(country,M_CIV) ,getmgkcost(M_CIV,country));
- X mvprintw(count++,30,"3) %d magic powers: %ld jewels",
- X num_powers(country,M_MGK),getmgkcost(M_MGK,country));
- X
- X price = getmgkcost(M_MIL,country);
- X if(price > getmgkcost(M_CIV,country))
- X price = getmgkcost(M_CIV,country);
- X if(price > getmgkcost(M_MGK,country))
- X price = getmgkcost(M_MGK,country);
- X
- X standend();
- X count=3;
- X /*print the powers that you have*/
- X i=0;
- X while( powers[i] != 0 ){
- X if(magic(country,powers[i])==TRUE)
- X mvprintw(count++,0,"you have power %s",*(pwrname+i));
- X i++;
- X }
- X
- X if(count<=7) count=8;
- X else count++;
- X standout();
- X mvprintw(count++,0,"YOU HAVE %ld JEWELS IN YOUR TREASURY",ntn[country].jewels);
- X if(price < ntn[country].jewels){
- X mvaddstr(count++,0,"DO YOU WISH TO BUY A RANDOM NEW POWER (enter y or n):");
- X standend();
- X refresh();
- X count++;
- X if(getch()=='y'){
- X done=FALSE;
- X mvprintw(count++,0,"ENTER SELECTION (1,2,3):");
- X refresh();
- X type = get_number();
- X if(type==M_MIL || type==M_CIV || type==M_MGK){
- X price=getmgkcost(type,country);
- X#ifdef OGOD
- X if (isgod==TRUE) price=0;
- X#endif OGOD
- X if(ntn[country].jewels>=price) {
- X loop = 0;
- X while(loop++ < 500) if((x=getmagic(type))!=0){
- X ntn[country].jewels -= price;
- X CHGMGK;
- X exenewmgk(x);
- X refresh();
- X if (isgod==TRUE) country=0;
- X return;
- X }
- X if (loop >= 500)
- X mvaddstr(count++,0,"You have too many powers! -- hit any key");
- X refresh();
- X getch();
- X } else {
- X mvaddstr(count++,0,"NOT ENOUGH JEWELS TO PURCHASE NEW MAGIC -- hit any key");
- X refresh();
- X getch();
- X }
- X } else {
- X mvaddstr(count++,0,"INVALID SELECTION -- hit any key");
- X refresh();
- X getch();
- X }
- X }
- X } else {
- X mvaddstr(count++,0,"CAN NOT BUY NEW POWER - hit any key");
- X standend();
- X refresh();
- X getch();
- X }
- X if(magic(country,SUMMON)==TRUE)
- X done=dosummon(&count);
- X#ifdef ORCTAKE
- X if((ntn[country].race==ORC)&&(ntn[country].jewels>=TAKEPRICE))
- X done=orctake(&count);
- X#endif ORCTAKE
- X#ifdef OGOD
- X if (isgod==TRUE) {
- X mvaddstr(count++,0,"GOD: REMOVE A MAGIC POWER? (y or n)");
- X refresh();
- X if (getch()=='y') killmagk();
- X }
- X#endif OGOD
- X }
- X if(isgod==1) country=0;
- X}
- X#endif CONQUER
- X/*do magic for both npcs and pcs in update*/
- X/*if target is 0 then it is update and target will be picked randomly*/
- Xint
- Xtakeover(percent,target)
- Xint percent,target;
- X{
- X int loop=1,y,save,isupdate=0;
- X save=country;
- X if(target==country) return(0);
- X if(target==0) isupdate=1;
- X country=target;
- X if(rand()%100<percent){
- X loop=0;
- X y=0;
- X if (target==0) while(loop==0){
- X y++;
- X country=rand()%MAXNTN;
- X if((ntn[country].race==ntn[save].race)
- X &&(ntn[country].active>=2)
- X &&(country!=save)) loop=1;
- X else if(y>=500) {
- X country=save;
- X return(0);
- X }
- X }
- X sct[ntn[country].capx][ntn[country].capy].owner=save;
- X if(isupdate==1){
- X printf("nation %s taken over by %s\n",ntn[country].name,ntn[save].name);
- X fprintf(fnews,"1.\tnation %s taken over by %s\n",ntn[country].name,ntn[save].name);
- X }
- X else {
- X DESTROY;
- X if ((fnews=fopen("/dev/null","w"))==NULL){
- X printf("error opening null file\n");
- X exit(FAIL);
- X }
- X }
- X destroy(country);
- X if(isupdate!=1) fclose(fnews);
- X y=country;
- X country=save;
- X return(y);
- X }
- X country=save;
- X return(0);
- X}
- X
- X/*execute new magic*/
- Xlong
- Xexenewmgk(newpower)
- Xlong newpower;
- X{
- X short x,y;
- X if(newpower==WARRIOR) {
- X ntn[country].aplus+=10;
- X ntn[country].dplus+=10;
- X return(0L);
- X }
- X if(newpower==CAPTAIN) {
- X ntn[country].aplus+=10;
- X ntn[country].dplus+=10;
- X return(0L);
- X }
- X if(newpower==WARLORD) {
- X ntn[country].aplus+=10;
- X ntn[country].dplus+=10;
- X return(0L);
- X }
- X if(newpower==HEALER) {
- X if(ntn[country].race==ORC) {
- X printf("ORCS CANT HAVE HEALER POWER\n");
- X abrt();
- X } else if(ntn[country].repro<=8){
- X ntn[country].repro+=2;
- X } else if(ntn[country].repro==9){
- X ntn[country].repro=10;
- X ntn[country].dplus+=5;
- X } else if(ntn[country].repro>=10){
- X ntn[country].dplus+=10;
- X }
- X return(0L);
- X }
- X if(newpower==DESTROYER) {
- X for(x=ntn[country].capx-3;x<=ntn[country].capx+3;x++) {
- X for(y=ntn[country].capy-3;y<=ntn[country].capy+3;y++){
- X if((ONMAP)
- X &&(sct[x][y].altitude!=WATER)
- X#ifdef DERVDESG
- X &&((rand()%2)==0)
- X#else
- X &&(tofood(sct[x][y].vegetation,0)<DESFOOD)
- X#endif DERVDESG
- X &&((x!=ntn[country].capx)
- X ||(y!=ntn[country].capy))){
- X sct[x][y].vegetation=DESERT;
- X sct[x][y].designation=DNODESIG;
- X }
- X }
- X }
- X updmove(ntn[country].race,country);
- X return(0L);
- X }
- X if(newpower==DERVISH) {
- X updmove(ntn[country].race,country);
- X return(0L);
- X }
- X if((newpower==MI_MONST)
- X ||(newpower==AV_MONST)
- X ||(newpower==MA_MONST)
- X ||(newpower==KNOWALL)
- X ||(newpower==HIDDEN)
- X ||(newpower==THE_VOID)
- X ||(newpower==ARCHITECT)
- X ||(newpower==MINER))
- X return(0L);
- X if(newpower==VAMPIRE) {
- X ntn[country].aplus-=35;
- X ntn[country].dplus-=35;
- X ntn[country].maxmove-=2;
- X return(0L);
- X }
- X if(newpower==URBAN) {
- X if(ntn[country].race==ORC) {
- X x=ntn[country].repro;
- X if(ntn[country].repro>=13){
- X ntn[country].maxmove+=4;
- X }
- X else if(ntn[country].repro>10){
- X ntn[country].maxmove+=2*(x-10);
- X ntn[country].repro=13;
- X }
- X else ntn[country].repro+=3;
- X }
- X else if(ntn[country].repro<=9){
- X ntn[country].repro+=3;
- X }
- X else {
- X ntn[country].maxmove+=2*(ntn[country].repro-9);
- X ntn[country].repro=12;
- X }
- X return(0L);
- X }
- X if(newpower==BREEDER) {
- X ntn[country].repro+=3;
- X ntn[country].dplus-=10;
- X ntn[country].aplus-=10;
- X return(0L);
- X }
- X if(newpower==DEMOCRACY){
- X ntn[country].repro+=1;
- X ntn[country].dplus+=10;
- X ntn[country].aplus+=10;
- X return(0L);
- X }
- X if(newpower==ROADS){
- X ntn[country].maxmove+=4;
- X return(0L);
- X }
- X if(newpower==ARMOR){
- X ntn[country].maxmove-=3;
- X if( ntn[country].maxmove<4) ntn[country].maxmove=4;
- X ntn[country].dplus+=20;
- X }
- X if((newpower==NINJA)
- X ||(newpower==STEEL)
- X ||(newpower==ARCHER)
- X ||(newpower==CAVALRY)
- X ||(newpower==SAILOR)
- X ||(newpower==SUMMON)
- X ||(newpower==WYZARD)
- X ||(newpower==SORCERER)
- X ||(newpower==SAPPER)
- X ||(newpower==AVIAN)){ /* these powers are only for pc's */
- X return(1L);
- X }
- X return(0L);
- X}
- X#ifdef CONQUER
- X/* returns 0 if summon occurred, 1 else */
- Xint
- Xdosummon(count)
- Xint *count;
- X{
- X int done=TRUE,x,i,armynum;
- X long e_cost;
- X int newtype,s_cost;
- X if((*count)>20) {
- X (*count)=2;
- X clear();
- X }
- X mvaddstr((*count)++,0,"YOU HAVE SUMMON POWER");
- X mvaddstr((*count)++,0,"DO YOU WISH SUMMON A MONSTER (enter y or n):");
- X refresh();
- X if(getch()=='y'){
- X done=FALSE;
- X x=0;
- X mvaddstr((*count)++,x,"options:");
- X x+=9;
- X for(i=MINMONSTER;i<=MAXMONSTER;i++){
- X if(unitvalid(i)==TRUE) {
- X mvprintw((*count),x+2,"%s",*(shunittype+(i%200)));
- X mvprintw((*count),x,"(%c)",*(shunittype+(i%200))[0]);
- X x+=7;
- X if(x>COLS-20){
- X x=0;
- X (*count)++;
- X }
- X }
- X }
- X (*count)++;
- X mvaddstr((*count)++,0,"what type of unit do you want to raise:");
- X refresh();
- X
- X newtype='0';
- X switch(getch()){
- X case 's':
- X newtype=SPIRIT;
- X break;
- X case 'A':
- X newtype=ASSASSIN;
- X break;
- X case 'e':
- X newtype=DJINNI;
- X break;
- X case 'G':
- X newtype=GARGOYLE;
- X break;
- X case 'W':
- X newtype=WRAITH;
- X break;
- X case 'H':
- X newtype=HERO;
- X break;
- X case 'C':
- X newtype=CENTAUR;
- X break;
- X case 'g':
- X newtype=GIANT;
- X break;
- X case 'S':
- X newtype=SUPERHERO;
- X break;
- X case 'M':
- X newtype=MUMMY;
- X break;
- X case 'E':
- X newtype=ELEMENTAL;
- X break;
- X case 'm':
- X newtype=MINOTAUR;
- X break;
- X case 'd':
- X newtype=DEMON;
- X break;
- X case 'B':
- X newtype=BALROG;
- X break;
- X case 'D':
- X newtype=DRAGON;
- X break;
- X default:
- X break;
- X }
- X
- X if(unitvalid(newtype)==FALSE) {
- X beep();
- X mvprintw((*count)++,0,"%d INVALID TYPE",newtype);
- X refresh();
- X sleep(2);
- X return(done);
- X }
- X
- X e_cost= (long) *(u_encost+(newtype%200)) * *(unitminsth+(newtype%200));
- X s_cost= *(u_encost+(newtype%200));
- X /*check to see if enough spell points*/
- X if(s_cost > ntn[country].spellpts) {
- X mvprintw((*count)++,0,"you dont have %d spell points",s_cost);
- X refresh();
- X sleep(1);
- X return(done);
- X }
- X
- X /*check to see if enough gold*/
- X if(e_cost > ntn[country].tgold) {
- X mvprintw((*count)++,0,"you dont have %ld gold in treasury",e_cost);
- X refresh();
- X sleep(1);
- X return(done);
- X }
- X
- X armynum=0;
- X while(armynum<MAXARM) {
- X if(ASOLD<=0) {
- X ASOLD= *(unitminsth+(newtype%200));
- X ATYPE=newtype;
- X ASTAT=DEFEND; /* set new armies to DEFEND */
- X AXLOC=ntn[country].capx;
- X AYLOC=ntn[country].capy;
- X AMOVE=0;
- X AADJLOC;
- X AADJSTAT;
- X AADJMEN;
- X AADJMOV;
- X armynum=MAXARM;
- X } else if(armynum==MAXARM-1) {
- X mvaddstr((*count)++,0,"NO FREE ARMIES");
- X refresh();
- X sleep(2);
- X return(done);
- X } else armynum++;
- X }
- X ntn[country].tgold -= e_cost;
- X ntn[country].spellpts -= s_cost;
- X EDECSPL;
- X }
- X return(done);
- X}
- X#endif CONQUER
- X#ifdef CONQUER
- X#ifdef ORCTAKE
- X/* orc takeover routine... returns 0 if run, 1 if not */
- Xorctake(count)
- Xint *count;
- X{
- X int chance=0;
- X if((*count)>20) {
- X (*count)=2;
- X clear();
- X }
- X if(magic((*count)ry,MA_MONST)==TRUE) {
- X mvaddstr((*count)++,0," You have a 10 percent chance for %ld Jewels take over other orcs",TAKEPRICE);
- X chance=10;
- X } else if(magic((*count)ry,AV_MONST)==TRUE) {
- X mvaddstr((*count)++,0," You have a 6 percent chance for %ld Jewels take over other orcs",TAKEPRICE);
- X chance=6;
- X } else if(magic((*count)ry,MI_MONST)==TRUE){
- X mvaddstr((*count)++,0," You have a 3 percent chance for %ld Jewels to take over other orcs",TAKEPRICE);
- X chance=3;
- X }
- X if(chance==0) return(1);
- X
- X mvprintw((*count)++,0,"DO YOU WISH TO TAKE OVER AN ORC NPC NATION (enter y or n):");
- X refresh();
- X if(getch()=='y'){
- X done=FALSE;
- X mvaddstr((*count)++,0," What orc nation (number):");
- X refresh();
- X i=get_number();
- X if(ntn[i].race==ORC){
- X ntn[(*count)ry].jewels-=TAKEPRICE;
- X if((i=takeover(chance,i))==1)
- X mvprintw((*count)++,0," Successful: %d",i);
- X }
- X else mvaddstr((*count)++,0," Wrong Race");
- X }
- X return(done);
- X}
- X#endif ORCTAKE
- X#endif CONQUER
- X#ifdef CONQUER
- X/* unitvalid tells if nation has powers needed to draft unit */
- Xint
- Xunitvalid(type)
- Xint type;
- X{
- X int valid=FALSE;
- X switch(type){
- X case GARGOYLE:
- X case A_GOBLIN:
- X case A_ORC: if(magic(country,MI_MONST)==TRUE) valid=TRUE;
- X break;
- X case A_MARINES: if(magic(country,SAILOR)==TRUE) valid=TRUE;
- X break;
- X case A_ARCHER: if(magic(country,ARCHER)==TRUE) valid=TRUE;
- X break;
- X case A_URUK: if(magic(country,AV_MONST)==TRUE) valid=TRUE;
- X break;
- X case A_NINJA: if(magic(country,NINJA)==TRUE) valid=TRUE;
- X break;
- X case A_PHALANX: if(magic(country,CAPTAIN)==TRUE) valid=TRUE;
- X break;
- X case A_OLOG: if((magic(country,BREEDER)==TRUE)
- X &&(magic(country,AV_MONST)==TRUE)) valid=TRUE;
- X break;
- X case A_ELEPHANT:if(magic(country,DERVISH)==TRUE) valid=TRUE;
- X break;
- X case SUPERHERO:
- X case A_LEGION: if(magic(country,WARLORD)==TRUE) valid=TRUE;
- X break;
- X case A_DRAGOON: if(magic(country,CAVALRY)==TRUE) valid=TRUE;
- X break;
- X case A_TROLL: if(magic(country,MA_MONST)==TRUE) valid=TRUE;
- X break;
- X case A_ELITE: if(magic(country,STEEL)==TRUE) valid=TRUE;
- X break;
- X case A_LT_CAV:
- X case A_CAVALRY: if(magic(country,CAVALRY)==TRUE) valid=TRUE;
- X break;
- X case A_KNIGHT: if((magic(country,ARMOR)==TRUE)
- X &&(magic(country,CAVALRY)==TRUE)) valid=TRUE;
- X break;
- X case A_ROC:
- X case A_GRIFFON: if(magic(country,AVIAN)==TRUE) valid=TRUE;
- X break;
- X case ASSASSIN: if(magic(country,NINJA)==TRUE) valid=TRUE;
- X break;
- X case DJINNI: if(magic(country,DERVISH)==TRUE) valid=TRUE;
- X break;
- X case HERO: if(magic(country,WARRIOR)==TRUE) valid=TRUE;
- X break;
- X case ELEMENTAL: if(magic(country,SORCERER)==TRUE) valid=TRUE;
- X break;
- X case WRAITH:
- X case MUMMY: if(magic(country,VAMPIRE)==TRUE) valid=TRUE;
- X break;
- X case MINOTAUR:
- X case DEMON: if(magic(country,DESTROYER)==TRUE) valid=TRUE;
- X break;
- X case BALROG: if((magic(country,WYZARD)==TRUE)
- X &&(magic(country,VAMPIRE)==TRUE)) valid=TRUE;
- X break;
- X case DRAGON: if((magic(country,MA_MONST)==TRUE)
- X &&(magic(country,WYZARD)==TRUE)) valid=TRUE;
- X break;
- X default: valid=TRUE; /* for all unrestricted types */
- X }
- X return(valid);
- X}
- X#endif CONQUER
- X
- X#ifdef OGOD
- X/*remove a magic power*/
- Xlong
- Xremovemgk(oldpower)
- Xlong oldpower;
- X{
- X short x,y;
- X if((oldpower==WARRIOR)
- X ||(oldpower==CAPTAIN)
- X ||(oldpower==WARLORD)) {
- X ntn[country].aplus-=10;
- X ntn[country].dplus-=10;
- X return(0L);
- X }
- X if(oldpower==HEALER) {
- X if(ntn[country].race==ORC) {
- X printf("ORCS CANT HAVE HEALER POWER\n");
- X abrt();
- X } else ntn[country].repro -= 2;
- X return(0L);
- X }
- X if(oldpower==DESTROYER) {
- X for(x=ntn[country].capx-3;x<=ntn[country].capx+3;x++) {
- X for(y=ntn[country].capy-3;y<=ntn[country].capy+3;y++){
- X if((ONMAP)
- X &&(sct[x][y].altitude!=WATER)
- X &&((x!=ntn[country].capx)
- X ||(y!=ntn[country].capy))){
- X if (sct[x][y].vegetation==DESERT)
- X {
- X /* LT_VEG has medium value*/
- X sct[x][y].vegetation=LT_VEG;
- X sct[x][y].designation=DNODESIG;
- X }
- X }
- X }
- X }
- X updmove(ntn[country].race,country);
- X return(0L);
- X }
- X if(oldpower==DERVISH) {
- X updmove(ntn[country].race,country);
- X return(0L);
- X }
- X if((oldpower==MI_MONST)
- X ||(oldpower==AV_MONST)
- X ||(oldpower==MA_MONST)
- X ||(oldpower==KNOWALL)
- X ||(oldpower==HIDDEN)
- X ||(oldpower==THE_VOID)
- X ||(oldpower==ARCHITECT)
- X ||(oldpower==MINER))
- X return(0L);
- X if(oldpower==VAMPIRE) {
- X ntn[country].aplus+=35;
- X ntn[country].dplus+=35;
- X ntn[country].maxmove+=2;
- X return(0L);
- X }
- X if(oldpower==URBAN) {
- X ntn[country].repro -= 3;
- X return(0L);
- X }
- X if(oldpower==BREEDER) {
- X ntn[country].repro-=3;
- X ntn[country].dplus+=10;
- X ntn[country].aplus+=10;
- X return(0L);
- X }
- X if(oldpower==DEMOCRACY){
- X ntn[country].repro-=1;
- X ntn[country].dplus-=10;
- X ntn[country].aplus-=10;
- X return(0L);
- X }
- X if(oldpower==ROADS){
- X ntn[country].maxmove-=4;
- X return(0L);
- X }
- X if(oldpower==ARMOR){
- X ntn[country].maxmove+=3;
- X ntn[country].dplus-=20;
- X }
- X if((oldpower==NINJA)
- X ||(oldpower==STEEL)
- X ||(oldpower==ARCHER)
- X ||(oldpower==CAVALRY)
- X ||(oldpower==SAILOR)
- X ||(oldpower==SUMMON)
- X ||(oldpower==WYZARD)
- X ||(oldpower==SORCERER)
- X ||(oldpower==SAPPER)
- X ||(oldpower==AVIAN)){ /* these powers are only for pc's */
- X return(1L);
- X }
- X return(0L);
- X}
- X
- X#ifdef CONQUER
- X/* killmagk: this routine removes a magic power */
- Xkillmagk()
- X{
- X int count,choice,i;
- X long holdmagk;
- X
- X clear();
- X count=3;
- X standout();
- X mvprintw(0,(COLS/2)-15,"MAGIC POWERS FOR %s",ntn[country].name);
- X standend();
- X i=0;
- X while( powers[i] != 0 ){
- X if(magic(country,powers[i])==TRUE)
- X mvprintw(count,0,"%d: power %s",count-2,*(pwrname+i));
- X count++;
- X i++;
- X }
- X count++;
- X standout();
- X mvaddstr(count++,5," Which power to remove? ");
- X standend();
- X refresh();
- X choice=get_number();
- X if (choice>count-5) choice=0;
- X mvprintw(count++,0," Remove magic #%d? (y or [n])",choice);
- X refresh();
- X if ((getch()=='y')&&(choice!=0)) {
- X i=0;
- X if (magic(country,holdmagk=powers[i])==TRUE) choice--;
- X while(choice) {
- X i++;
- X if (magic(country,holdmagk=powers[i])==TRUE)
- X choice--;
- X }
- X ntn[country].powers ^= holdmagk;
- X removemgk(holdmagk);
- X }
- X}
- X#endif CONQUER
- X#endif OGOD
- END_OF_magic.c
- if test 20241 -ne `wc -c <magic.c`; then
- echo shar: \"magic.c\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f main.c -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"main.c\"
- else
- echo shar: Extracting \"main.c\" \(19741 characters\)
- sed "s/^X//" >main.c <<'END_OF_main.c'
- X/*conquer : Copyright (c) 1988 by Ed Barlow.
- X * I spent a long time writing this code & I hope that you respect this.
- X * I give permission to alter the code, but not to copy or redistribute
- X * it without my explicit permission. If you alter the code,
- X * please document changes and send me a copy, so all can have it.
- X * This code, to the best of my knowledge works well, but it is my first
- X * 'C' program and should be treated as such. I disclaim any
- X * responsibility for the codes actions (use at your own risk). I guess
- X * I am saying "Happy gaming", and am trying not to get sued in the process.
- X * Ed
- X */
- X
- X/*include files*/
- X#include <ctype.h>
- X#include "header.h"
- X#include "data.h"
- X#include <signal.h>
- X#include <fcntl.h>
- X#include <pwd.h>
- X
- Xextern int armornvy;
- X
- X/*Declarations*/
- Xchar fison[20];
- Xchar *getpass();
- Xstruct s_sector sct[MAPX][MAPY];
- Xstruct nation ntn[NTOTAL]; /* player nation stats */
- X/*is sector occupied by an army?*/
- Xchar occ[MAPX][MAPY];
- Xshort movecost[MAPX][MAPY];
- Xlong startgold=0;
- X
- X/*offset of upper left hand corner*/
- Xshort xoffset=0,yoffset=0;
- X/*current cursor postion (relative to 00 in upper corner)*/
- X/* position is 2*x,y*/
- Xshort xcurs=0,ycurs=0;
- X/*redraw map in this turn if redraw is a 1*/
- Xshort redraw=TRUE;
- X/*1 if you have quit*/
- Xint done=FALSE;
- X/*display state*/
- Xshort hilmode=HI_OWN;
- Xshort dismode=DI_DESI;
- Xshort selector=0; /*selector (y vbl) for which army/navy... is "picked"*/
- Xshort pager=0; /*pager for selector 0,1,2,3*/
- X/* nation id of owner*/
- Xshort country=0;
- Xint owneruid;
- X
- XFILE *fexe, *fopen();
- X
- Xint
- Xmain(argc,argv)
- Xint argc;
- Xchar **argv;
- X{
- X int geteuid(), getuid(), setuid();
- X register int i;
- X char *name;
- X void srand();
- X int getopt();
- X char passwd[20];
- X long time();
- X char string[80];
- X extern char *optarg;
- X char defaultdir[256];
- X struct passwd *getpwnam();
- X int sflag=0;
- X
- X owneruid=getuid();
- X srand((unsigned) time((long *) 0));
- X strcpy(defaultdir, DEFAULTDIR);
- X name = string;
- X *name = 0;
- X
- X /* process the command line arguments */
- X while((i=getopt(argc,argv,"hn:d:s"))!=EOF) switch(i){
- X /* process the command line arguments */
- X case 'h': /* execute help program*/
- X if (chdir(defaultdir)) {
- X printf("unable to change dir to %s\n",defaultdir);
- X exit(FAIL);
- X }
- X initscr();
- X savetty();
- X noecho();
- X crmode(); /* cbreak mode */
- X signal(SIGINT,SIG_IGN); /* disable keyboard signals */
- X signal(SIGQUIT,SIG_IGN);
- X help();
- X endwin();
- X putchar('\n');
- X exit(SUCCESS);
- X case 'd':
- X strcpy(defaultdir, optarg);
- X break;
- X case 'n':
- X strcpy(name, optarg);
- X break;
- X case 's': /*print the score*/
- X sflag++;
- X break;
- X case '?': /* print out command line arguments */
- X printf("Command line format: %s [-hs -d DIR -nNAT]\n",argv[0]);
- X printf("\t-n NAT play as nation NAT\n");
- X printf("\t-h print help text\n");
- X printf("\t-d DIR to use play different game\n");
- X printf("\t-s print scores\n");
- X exit(SUCCESS);
- X };
- X
- X /* now that we have parsed the args, we can got to the
- X * dir where the files are kept and do some work.
- X */
- X if (chdir(defaultdir)) {
- X printf("unable to change dir to %s\n",defaultdir);
- X exit(FAIL);
- X }
- X
- X /* read data*/
- X readdata();
- X verifydata( __FILE__, __LINE__ );
- X
- X if(sflag){
- X printscore();
- X exit(SUCCESS);
- X }
- X
- X /*
- X * Set the real uid to the effective. This will avoid a
- X * number of problems involving file protection if the
- X * executable is setuid.
- X */
- X (void) setuid (geteuid ()) ;
- X
- X /* must be a normal interactive game */
- X armornvy=AORN;
- X
- X /* identify the player and the country he represents */
- X
- X /* get nation name either from command line or by asking
- X * if you fail will give you the name of administrator of game
- X */
- X
- X /* verify existence of nation*/
- X printf("conquer %s: Copyright (c) 1988 by Edward M Barlow\n",VERSION);
- X if (*name == 0) {
- X printf("what nation would you like to be:");
- X scanf("%s",name);
- X }
- X#ifdef OGOD
- X if(strcmp(name,"god")==0) {
- X if ( owneruid != (getpwnam(LOGIN))->pw_uid ){
- X printf("sorry -- you can not login as god\n");
- X printf("you need to be logged in as %s\n",LOGIN);
- X exit(FAIL);
- X }
- X strcpy(name,"unowned");
- X }
- X#else
- X if(strcmp(name,"god")==0) strcpy(name,"unowned");
- X#endif OGOD
- X country=(-1);
- X for(i=0;i<NTOTAL;i++)
- X if(strcmp(name,ntn[i].name)==0) country=i;
- X
- X if(country==(-1)) {
- X printf("name not found\n");
- X printf("\nfor rules type <conquer -h>");
- X printf("\nfor more information please contact %s\n",OWNER);
- X return;
- X }
- X
- X /*get encrypted password*/
- X strcpy(passwd,crypt(getpass("\nwhat is your nations password:"),SALT));
- X if((strncmp(passwd,ntn[country].passwd,PASSLTH)!=0)
- X &&(strncmp(passwd,ntn[0].passwd,PASSLTH)!=0)) {
- X strcpy(passwd,crypt(getpass("\nerror: reenter your nations password:"),SALT));
- X if((strncmp(passwd,ntn[country].passwd,PASSLTH)!=0)
- X &&(strncmp(passwd,ntn[0].passwd,PASSLTH)!=0)) {
- X printf("\nsorry:");
- X printf("\nfor rules type <conquer -h>");
- X printf("\nfor more information on the system please contact %s\n",OWNER);
- X exit(FAIL);
- X }
- X }
- X
- X /* check if user is super-user nation[0] */
- X /* else setup cursor to capitol*/
- X if(country==0) {
- X printf("welcome super user\n");
- X xcurs=1;
- X xoffset=0;
- X ycurs=1;
- X yoffset=0;
- X } else {
- X printf("\nloading nation %s\n",ntn[country].name);
- X if (ntn[country].active==0) {
- X printf("\nSorry, for some reason, your country no longer exists.");
- X printf("\nIf there is a problem, please contact %s.\n",OWNER);
- X exit(FAIL);
- X }
- X if(aretheyon()==1) {
- X printf("\nSorry, country is already logged in.\n");
- X printf("Please try again later.\n");
- X exit(FAIL);
- X }
- X execute();
- X if(ntn[country].capx>15) {
- X xcurs=15;
- X xoffset= (ntn[country].capx-15);
- X }
- X else {
- X xcurs= ntn[country].capx;
- X xoffset= 0;
- X }
- X if(ntn[country].capy>10) {
- X ycurs=10;
- X yoffset= (ntn[country].capy-10);
- X }
- X else {
- X yoffset= 0;
- X ycurs= ntn[country].capy;
- X }
- X }
- X
- X updmove(ntn[country].race,country);
- X
- X /* open output for future printing*/
- X {
- X char filename[80];
- X sprintf(filename,"%s%d",exefile,country);
- X if ((fexe=fopen(filename,"a"))==NULL) {
- X beep();
- X printf("error opening %s\n",filename);
- X unlink(fison);
- X exit(FAIL);
- X }
- X }
- X
- X /* SET UP THE SCREEN */
- X printf("about to set up the screen");
- X initscr();
- X crmode(); /* cbreak mode */
- X signal(SIGINT,SIG_IGN); /* disable keyboard signals */
- X signal(SIGQUIT,SIG_IGN);
- X signal(SIGHUP,hangup); /* must catch hangups */
- X
- X prep(country);
- X noecho();
- X
- X /*main while routine*/
- X done=FALSE;
- X while (done==FALSE)
- X {
- X /* check if cursor is out of bounds*/
- X coffmap();
- X /*get commands, make moves and input command*/
- X parse();
- X }
- X
- X if(country==0) writedata();
- X else {
- X fprintf(fexe,"L_NGOLD\t%d \t%d \t%ld \t0 \t0 \t%s\n",
- X XNAGOLD ,country,ntn[country].tgold,"null");
- X fprintf(fexe,"L_NIRON\t%d \t%d \t%ld \t0 \t0 \t%s\n",
- X XNAIRON ,country,ntn[country].tiron,"null");
- X fprintf(fexe,"L_NJWLS\t%d \t%d \t%ld \t0 \t0 \t%s\n",
- X XNARGOLD ,country,ntn[country].jewels,"null");
- X }
- X /*done so quit*/
- X unlink(fison);
- X clear();
- X printw("quitting\n");
- X refresh();
- X nocrmode();
- X endwin();
- X fclose(fexe);
- X exit(SUCCESS);
- X}
- X
- X/*make the bottom of the screen*/
- Xint
- Xmakebottom()
- X{
- X move(LINES-4,0);
- X clrtoeol();
- X mvprintw(LINES-3,0,"Conquer: %s",VERSION);
- X clrtoeol();
- X mvaddstr(LINES-1,0," type ? for help");
- X clrtoeol();
- X mvaddstr(LINES-2,0," type Q to quit");
- X clrtoeol();
- X if(country==0) mvaddstr(LINES-3,COLS-20,"nation..GOD ");
- X else {
- X mvprintw(LINES-3,COLS-20,"nation...%s",ntn[country].name);
- X mvprintw(LINES-2,COLS-20,"treasury.%ld",ntn[country].tgold);
- X mvprintw(LINES-1,COLS-20,"score....%ld",ntn[country].score);
- X }
- X}
- X
- X/* parse */
- Xint
- Xparse()
- X{
- X register int i;
- X char name[20];
- X char passwd[12];
- X int ocountry;
- X
- X switch(getch()) {
- X case EXT_CMD: /* extended command */
- X ext_cmd();
- X break;
- X case '': /*redraw the screen*/
- X redraw=TRUE;
- X break;
- X case 'a': /*army report*/
- X redraw=TRUE;
- X armyrpt(0);
- X break;
- X case 'A': /*adjust army*/
- X adjarm(-1);
- X makebottom();
- X break;
- X case '1':
- X case 'b': /*move south west*/
- X pager=0;
- X selector=0;
- X xcurs--;
- X ycurs++;
- X break;
- X case 'B': /*budget*/
- X redraw=TRUE;
- X budget();
- X break;
- X case 'c': /*change nation stats*/
- X redraw=TRUE;
- X change();
- X break;
- X case 'C': /*construct*/
- X construct();
- X makebottom();
- X break;
- X case 'd': /*change display*/
- X newdisplay();
- X break;
- X case 'D': /*draft*/
- X draft();
- X makebottom();
- X break;
- X case 'f': /*report on ships and load/unload*/
- X redraw=TRUE;
- X fleetrpt();
- X break;
- X case 'F': /*go to next army*/
- X navygoto();
- X break;
- X case 'g': /*group report*/
- X redraw=TRUE;
- X armyrpt(1);
- X break;
- X case 'G': /*go to next army*/
- X armygoto();
- X break;
- X case 'H': /*scroll west*/
- X pager=0;
- X selector=0;
- X xcurs-=((COLS-22)/4);
- X break;
- X case '4':
- X case 'h': /*move west*/
- X pager=0;
- X selector=0;
- X xcurs--;
- X break;
- X case 'J': /*scroll down*/
- X pager=0;
- X selector=0;
- X ycurs+=((SCREEN_Y_SIZE)/2);
- X break;
- X case '2':
- X case 'j': /*move down*/
- X pager=0;
- X selector=0;
- X ycurs++;
- X break;
- X case '8':
- X case 'k': /*move up*/
- X pager=0;
- X selector=0;
- X ycurs--;
- X break;
- X case 'K': /*scroll up*/
- X pager=0;
- X selector=0;
- X ycurs-=((SCREEN_Y_SIZE)/2);
- X break;
- X case '6':
- X case 'l': /*move east*/
- X pager=0;
- X selector=0;
- X xcurs++;
- X break;
- X case 'L': /*scroll east*/
- X pager=0;
- X selector=0;
- X xcurs+=((COLS-22)/4);
- X break;
- X case 'm': /*move selected item to new x,y */
- X mymove();
- X makebottom();
- X prep(country);
- X pager=0;
- X selector=0;
- X break;
- X case 'M': /*magic*/
- X redraw=TRUE;
- X domagic();
- X break;
- X case '3':
- X case 'n': /*move south-east*/
- X pager=0;
- X selector=0;
- X ycurs++;
- X xcurs++;
- X break;
- X case 'N': /*read newspaper */
- X redraw=TRUE;
- X newspaper();
- X break;
- X case 'p': /*pick*/
- X selector+=2;
- X if(selector>=10) {
- X selector=0;
- X pager+=1;
- X }
- X /*current selected unit is selector/2+5*pager*/
- X if((selector/2)+(pager*5)>=units_in_sector(XREAL,YREAL,country)) {
- X pager=0;
- X selector=0;
- X }
- X break;
- X case 'P': /*production*/
- X redraw=TRUE;
- X produce();
- X break;
- X case 'Q': /*quit*/
- X case 'q': /*quit*/
- X done=TRUE;
- X break;
- X case 'r': /*redesignate*/
- X redesignate();
- X makemap();
- X makebottom();
- X break;
- X /*list*/
- X case 'R': /*Read Messages*/
- X redraw=TRUE;
- X rmessage();
- X refresh();
- X break;
- X case 's': /*score*/
- X redraw=TRUE;
- X showscore();
- X break;
- X case 'S': /*diplomacy screens*/
- X diploscrn();
- X redraw=TRUE;
- X break;
- X case '9':
- X case 'u': /*move north-east*/
- X pager=0;
- X selector=0;
- X ycurs--;
- X xcurs++;
- X break;
- X case 'U': /* scroll north-east */
- X pager=0;
- X selector=0;
- X xcurs+=((COLS-22)/4);
- X ycurs-=((SCREEN_Y_SIZE)/2);
- X break;
- X case 'W': /*message*/
- X redraw=TRUE;
- X wmessage();
- X break;
- X case '7':
- X case 'y': /*move north-west*/
- X pager=0;
- X selector=0;
- X ycurs--;
- X xcurs--;
- X break;
- X case 'Y': /* scroll north-west */
- X pager=0;
- X selector=0;
- X xcurs-=((COLS-22)/4);
- X ycurs-=((SCREEN_Y_SIZE)/2);
- X break;
- X case 'Z': /*move civilians up to 2 spaces*/
- X redraw=TRUE;
- X moveciv();
- X break;
- X case 'z': /*login as new user */
- X#ifdef OGOD
- X if (owneruid != (getpwnam(LOGIN))->pw_uid) break;
- X#endif
- X clear();
- X redraw=TRUE;
- X if(country != 0) {
- X fprintf(fexe,"L_NGOLD\t%d \t%d \t%ld \t0 \t0 \t%s\n",
- X XNAGOLD ,country,ntn[country].tgold,"null");
- X fprintf(fexe,"L_NIRON\t%d \t%d \t%ld \t0 \t0 \t%s\n",
- X XNAIRON ,country,ntn[country].tiron,"null");
- X fprintf(fexe,"L_NJWLS\t%d \t%d \t%ld \t0 \t0 \t%s\n",
- X XNARGOLD ,country,ntn[country].jewels,"null");
- X } else
- X mvaddstr(0,0,"SUPER-USER: YOUR CHANGES WILL NOT BE SAVED IF YOU DO THIS!!!");
- X standout();
- X mvaddstr(2,0,"change login to : ");
- X standend();
- X refresh();
- X get_nname(name);
- X
- X ocountry=country;
- X country=(-1);
- X if(strcmp(name,"god")==0) country=0;
- X else for(i=1;i<NTOTAL;i++)
- X if((strcmp(name,ntn[i].name)==0)&&(ntn[i].active>=1))
- X country=i;
- X
- X if(country==(-1)) {
- X errormsg("name not found");
- X country=ocountry;
- X break;
- X }
- X if(country==ocountry){
- X errormsg("same country");
- X break;
- X }
- X
- X /*get password*/
- X mvaddstr(2,0,"what is your nations password:");
- X refresh();
- X getstr(passwd);
- X strcpy(name,crypt(passwd,SALT));
- X
- X if((strncmp(name,ntn[country].passwd,PASSLTH)!=0)
- X &&(strncmp(name,ntn[0].passwd,PASSLTH)!=0)){
- X errormsg("sorry: password invalid");
- X country=ocountry;
- X break;
- X }
- X unlink(fison);
- X if(aretheyon()==1) {
- X errormsg("sorry: country is already logged in.");
- X refresh();
- X country=ocountry;
- X break;
- X }
- X
- X fclose(fexe);
- X /* open output for future printing*/
- X sprintf(name,"%s%d",exefile,country);
- X if ((fexe=fopen(name,"a"))==NULL) {
- X beep();
- X printf("error opening %s\n",name);
- X unlink(fison);
- X exit(FAIL);
- X }
- X
- X printf("\n");
- X readdata();
- X execute();
- X
- X updmove(ntn[country].race,country);
- X /*go to that nations capitol*/
- X if(country!=0) {
- X if(ntn[country].capx>15) {
- X xcurs=15;
- X xoffset= (ntn[country].capx-15);
- X }
- X else {
- X xcurs= ntn[country].capx;
- X xoffset= 0;
- X }
- X if(ntn[country].capy>10) {
- X ycurs=10;
- X yoffset= (ntn[country].capy-10);
- X }
- X else {
- X yoffset= 0;
- X ycurs= ntn[country].capy;
- X }
- X }
- X break;
- X case '?': /*display help screen*/
- X redraw=TRUE;
- X help();
- X break;
- X default:
- X beep();
- X }
- X}
- X
- Xvoid
- Xmakeside()
- X{
- X int i;
- X int armbonus=0;
- X int found=0,nvyfnd=0;
- X int enemy;
- X int y;
- X short armynum;
- X short nvynum;
- X int count;
- X int nfound=0;
- X register struct s_sector *sptr = &sct[XREAL][YREAL];
- X
- X /*clear side if you cant see it as you are out of bounds*/
- X if(inch()==' ') {
- X for(i=0;i<LINES-3;i++){
- X move(i,COLS-21);
- X clrtoeol();
- X }
- X return;
- X }
- X
- X /*clear top right hand side each new sector*/
- X for(count=0;count<11;count++){
- X move(count,COLS-21);
- X clrtoeol();
- X }
- X
- X /*check for your armies*/
- X count=units_in_sector(XREAL,YREAL,country);
- X if(pager*5>count) pager=0;
- X
- X /*first army found is #0*/
- X /*show armies / navies in range pager*5 to pager*5 + 4*/
- X /*so if pager=0 show 0 to 4, pager=2 show 10 to 14*/
- X /*current selected unit is selector/2+5*pager*/
- X
- X if(count>(5+(pager*5))) mvaddstr(10,COLS-20,"MORE...");
- X
- X nfound=0;
- X for(armynum=0;armynum<MAXARM;armynum++){
- X if((ASOLD>0)&&(AXLOC==XREAL)&&(AYLOC==YREAL)) {
- X if((nfound>=pager*5)&&(nfound<=4+(pager*5))) {
- X /*print that army to nfound%5*/
- X mvaddch((nfound%5)*2,COLS-21,'>');
- X if(selector==(nfound%5)*2) standout();
- X /*the mv,for gets the highlighting pretty*/
- X move((nfound%5)*2,COLS-10);
- X for(i=0;i<9;i++) addch(' ');
- X
- X mvprintw((nfound%5)*2,COLS-20,"army %d: %d (%s)",armynum,ASOLD,*(shunittype+(ATYPE%100)));
- X /*the mv,for gets the highlighting pretty*/
- X move((nfound%5)*2+1,COLS-10);
- X for(i=0;i<9;i++) addch(' ');
- X
- X mvprintw((nfound%5)*2+1,COLS-20," mv:%d st:%s",AMOVE,*(soldname+ASTAT));
- X standend();
- X }
- X nfound++;
- X }
- X if((occ[XREAL][YREAL]!=0)
- X &&(occ[XREAL][YREAL]!=country)
- X &&((sptr->owner==country)||((ASOLD>0)&&(AXLOC<=XREAL+1)
- X &&(AXLOC>=XREAL-1)&&(AYLOC<=YREAL+1)&&(AYLOC>=YREAL-1))))
- X found=1;
- X }
- X
- X if(nfound<4+(pager*5)) for(nvynum=0;nvynum<MAXNAVY;nvynum++){
- X if(((NWAR+NMER)!=0)&&(NXLOC==XREAL)&&(NYLOC==YREAL)) {
- X if((nfound>=pager*5)&&(nfound<=4+(pager*5))) {
- X /*print a navy*/
- X mvaddch((nfound%5)*2,COLS-21,'>');
- X if(selector==(nfound%5)*2) standout();
- X mvprintw((nfound%5)*2,COLS-20,"navy %d: move %d",nvynum,NMOVE);
- X mvprintw((nfound%5)*2+1,COLS-20," war:%d mer:%d",NWAR,NMER);
- X standend();
- X }
- X nfound++;
- X }
- X if((occ[XREAL][YREAL]!=0)&&(occ[XREAL][YREAL]!=country)
- X &&(sptr->altitude==WATER)
- X &&(NWAR+NMER>0)&&(NXLOC<=XREAL+1)&&(NXLOC>=XREAL-1)
- X &&(NYLOC<=YREAL+1)&&(NYLOC>=YREAL-1))
- X nvyfnd=1;
- X }
- X
- X count=0;
- X if(found==1) for(i=0;i<NTOTAL;i++) {
- X if( !magic(i,HIDDEN) || country == 0 ){
- X enemy=0;
- X for(armynum=0;armynum<MAXARM;armynum++){
- X if((i!=country)
- X &&(ntn[i].arm[armynum].xloc==XREAL)
- X &&(ntn[i].arm[armynum].yloc==YREAL)
- X &&(ntn[i].arm[armynum].sold>0))
- X enemy+=ntn[i].arm[armynum].sold;
- X }
- X if(enemy>0) {
- X if((magic(country,NINJA)==1) || country == 0 )
- X mvprintw(nfound*2+count,COLS-20,"%s: %d men ",ntn[i].name,enemy);
- X else if(magic(i,THE_VOID)==1){
- X mvprintw(nfound*2+count,COLS-20,"%s: ?? men ",ntn[i].name);
- X clrtoeol();
- X }
- X else mvprintw(nfound*2+count,COLS-20,"%s: %d men ",ntn[i].name,(enemy*(rand()%60+70)/100));
- X count++;
- X }
- X }
- X }
- X if(nvyfnd==1) for(i=0;i<NTOTAL;i++) {
- X if( magic(i,HIDDEN)!=1 || country == 0 )
- X for(nvynum=0;nvynum<MAXNAVY;nvynum++)
- X if((ntn[i].arm[nvynum].xloc==XREAL)
- X &&(ntn[i].arm[nvynum].yloc==YREAL)
- X &&(ntn[i].arm[nvynum].sold>0)){
- X if((magic(country,NINJA)==1) || country == 0 ){
- X mvprintw(nfound*2+count,COLS-20,"%s: %d ships ",
- X ntn[i].name,ntn[i].nvy[nvynum].warships+ntn[i].nvy[nvynum].merchant);
- X }
- X else if(magic(i,THE_VOID)==1){
- X mvprintw(nfound*2+count,COLS-20,"%s: ?? ships",ntn[i].name);
- X clrtoeol();
- X }
- X else mvprintw(nfound*2+count,COLS-20,"%s: %d ships ",
- X ntn[i].name,(ntn[i].nvy[nvynum].warships+ntn[i].nvy[nvynum].merchant)*(rand()%6+7)/10);
- X count++;
- X }
- X }
- X
- X standend();
- X mvprintw(11,COLS-20,"x is %d ",XREAL);
- X mvprintw(11,COLS-11,"y is %d ",YREAL);
- X
- X if((country!=0)&&(sptr->altitude==WATER)){
- X for(y=12;y<=20;y++) mvaddstr(y,COLS-20," ");
- X mvaddstr(14,COLS-9,"WATER");
- X }
- X else {
- X if((country!=0)&&(country!=sptr->owner)
- X &&(magic(sptr->owner,THE_VOID)==1)){
- X for(y=13;y<=20;y++) mvaddstr(y,COLS-20," ");
- X }
- X else {
- X
- X for(y=13;y<=14;y++) mvaddstr(y,COLS-20," ");
- X
- X for(i=0;i<=7;i++)
- X if(sptr->designation==*(des+i)){
- X mvprintw(13,COLS-20,"%s",*(desname+i));
- X clrtoeol();
- X }
- X
- X if((sptr->owner==country)||(country==0))
- X mvprintw(15,COLS-20,"people: %6d",sptr->people);
- X else
- X mvprintw(15,COLS-20,"people: %6d",sptr->people*(rand()%60+70)/100);
- X
- X if((sptr->owner==country)
- X ||(sptr->owner==0)
- X ||(sptr->owner>=MAXNTN)){
- X mvprintw(17,COLS-20,"gold is: %3d",sptr->gold);
- X mvprintw(18,COLS-20,"iron is: %3d",sptr->iron);
- X if(sptr->fortress == 0) {
- X mvaddstr(19,COLS-20," ");
- X } else {
- X if(sptr->designation==DCASTLE)
- X armbonus=5 * sptr->fortress;
- X else
- X if(sptr->designation==DCITY){
- X if(magic(country,ARCHITECT)==1){
- X armbonus+=10+16 * sptr->fortress;
- X }
- X else armbonus+=10+8 * sptr->fortress;
- X }
- X else if(sptr->designation==DCAPITOL){
- X if(magic(country,ARCHITECT)==1){
- X armbonus+=20+20 * sptr->fortress;
- X }
- X else armbonus+=20+10 * sptr->fortress;
- X }
- X if(armbonus>0)
- X mvprintw(19,COLS-20,"fortress: +%2d%%",armbonus);
- X }
- X }
- X else {
- X for(y=17;y<=19;y++) mvaddstr(y,COLS-20," ");
- X }
- X }
- X
- X standout();
- X if(sptr->owner==0) mvaddstr(12,COLS-20,"unowned");
- X else mvprintw(12,COLS-20,"owner: %s",ntn[sptr->owner].name);
- X standend();
- X clrtoeol();
- X
- X for(i=0;i<=10;i++)
- X if(sptr->vegetation==*(veg+i))
- X mvprintw(13,COLS-9,"%s",*(vegname+i));
- X
- X if(tofood(sptr->vegetation,country) != 0)
- X mvprintw(13,COLS-1,"%d",tofood(sptr->vegetation,country));
- X
- X if(sptr->owner!=0) for(i=1;i<=8;i++)
- X if(ntn[sptr->owner].race==*(races+i)[0]){
- X mvprintw(14,COLS-20,"%s",*(races+i));
- X clrtoeol();
- X }
- X
- X for(i=0;(*(ele+i) != '0');i++)
- X if( sptr->altitude == *(ele+i) ){
- X mvprintw(14,COLS-9,"%s",*(elename+i));
- X break;
- X }
- X }
- X
- X if(movecost[XREAL][YREAL]<0)
- X mvaddstr(16,COLS-20,"YOU CAN'T ENTER HERE");
- X else
- X mvprintw(16,COLS-20,"move cost: %2d ",movecost[XREAL][YREAL]);
- X}
- X
- X/* returns 1 if they are on, else 0 */
- Xint
- Xaretheyon()
- X{
- X FILE *fon;
- X /* set up a detection feature for when a country */
- X /* is logged on... to prevent multiple logins */
- X sprintf(fison,"%s%d",isonfile,country);
- X if((fon=fopen(fison,"r"))==NULL) {
- X fon=fopen(fison,"w");
- X fprintf(fon,"Arg!");
- X fclose(fon);
- X return(0);
- X } else {
- X return(1);
- X }
- X}
- END_OF_main.c
- if test 19741 -ne `wc -c <main.c`; then
- echo shar: \"main.c\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- echo shar: End of archive 6 \(of 8\).
- cp /dev/null ark6isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 8 archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-